#pragma once

#include<pthread.h>
#include<iostream>

class Mutex
{
public:
    Mutex(pthread_mutex_t *lock_p = nullptr):lock_p_(lock_p)
    {}

    void lock(){if(lock_p_) pthread_mutex_lock(lock_p_);}
    void unlock(){if(lock_p_) pthread_mutex_unlock(lock_p_);}

    ~Mutex(){}

private:
    pthread_mutex_t *lock_p_;
};


class LockGuard
{
public:
    LockGuard(pthread_mutex_t *mutex):_mutex(mutex)
    {
        _mutex.lock();
    }

    ~LockGuard(){_mutex.unlock();}

private:
    Mutex _mutex;
};